﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
using System.Windows.Resources;
using System.IO.IsolatedStorage;

namespace QWeiBoN.Util
{
    /// <summary>
    /// 用于判断图片格式
    /// </summary>
    public class ImageTypeUtil
    {
        /// <summary>        
        /// 定义图片格式        
        /// </summary>
        public enum ImageType { Null, Png, Jpg, Gif, Bmp }

        /// <summary>        
        /// 获取图片格式        
        /// </summary>
        public ImageType getImageType(Stream stream)
        {

            //获取图片文件流，根据图片是资源文件或者独立存储文件分别处理        
            //Stream stream = null;
            //如果是资源文件处理        
            //StreamResourceInfo info = Application.GetResourceStream(new Uri(streamUri, UriKind.RelativeOrAbsolute));
            //if (info != null)
            //{
            //    stream = info.Stream;
            //}
            //如果是独立存储文件处理        
            //using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
            //{
            //    //打开文件            
            //    stream = myIsolatedStorage.OpenFile(streamUri, FileMode.Open, FileAccess.Read);
            //}

            //图片格式            
            ImageType type = ImageType.Null;

            //读取图片文件头8个字节，并根据若干个字节来确定图片格式            
            byte[] header = new byte[8];
            stream.Read(header, 0, 8);

            //确定图片格式
            //确定图片格式            
            if (header[0] == 0x89 && header[1] == 0x50 && header[2] == 0x4E && header[3] == 0x47 && header[4] == 0x0D && header[5] == 0x0A && header[6] == 0x1A && header[7] == 0x0A)
            {
                //Png图片 8字节：89 50 4E 47 0D 0A 1A 0A                
                type = ImageType.Png;
            }
            else if (header[0] == 0xFF && header[1] == 0xD8)
            {
                //Jpg图片 2字节：FF D8                
                type = ImageType.Jpg;
            }
            else if (header[0] == 0x47 && header[1] == 0x49 && header[2] == 0x46 && header[3] == 0x38 && (header[4] == 0x39 || header[4] == 0x37) && header[5] == 0x61)
            {
                //Gif图片 6字节：47 49 46 38 39|37 61                
                type = ImageType.Gif;
            }
            else if (header[0] == 0x42 && header[1] == 0x4D)
            {
                //Bmp图片 2字节：42 4D                
                type = ImageType.Bmp;
            }
            //关闭字节流            
            stream.Close(); 
            return type;
        }

    }
}
